iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

Cosmos SDK 是一個方便開發者開發基於 Tendermint 的安全可靠狀態機的一套框架。其核心是 Golang 版的ABCI 的實作。它附帶一個 multistore 來持久化存儲數據還有一個 router 來處理交易。

當從 Tendermint 的 DeliverTx 請求中接收到一筆交易時,基於 Cosmos SDK 開發的應用程式處理交易的流程如下:

1.解碼從 Tendermint 共識引擎接收到的交易(Tendermint 只處理 []bytes)
2.從交易中提取消息並進行基本的合理性檢查。
3.將每條消息路由至對應的模組進行處理。
4.提交狀態變更。

應用程式同樣可以生成交易,進行編碼並傳遞給底層的 Tendermint 來進行廣播。

baseapp

baseApp 是 Cosmos SDK 的 ABCI 的實作樣板。裡面的 router 用來把交易路由到對應的模組。我們應用程式的主體文件 app.go 將自定義 app 類型,它將嵌入 baseapp。這樣,自定義的 app 類型將自動繼承 baseapp 的所有方法。

baseapp 的目的是在存儲和可擴展狀態機的之間提供安全接口,同時盡可能少地定義該狀態機(保持對 ABCI 的真實性)。

Multistore

Cosmos SDK 為狀態持久化提供了 multistore。multistore 允許開發者聲明任意數量的。只接受類型作為值,因此任何自定義的類型都需要在存儲之前使用 go-amino 進行編碼。

multistore 抽像用於區分不同的模組的狀態,每個都由其自身模組管理。

Modules

Cosmos SDK 的強大之處在於其模組化開發的理念,應用程式通過把一組可以互相操作的模組整合起來進行開發。每個模組定義狀態子集,並包含其自己的消息/交易處理器,而 SDK 負責將每條消息路由到其各自歸屬的模組。

每個模組都可以看做一個小型的狀態機。開發人員需要定義模組所處理的狀態的子集,以及修改狀態的 message 自定義類型(message 是由 baseapp 的方法從交易中提取的)。通常,每個模組在 multistore 聲明它自己的 KVStore 來持久化保存它所定義的狀態子集。大多數開發者在開發自己的模組時也需要訪問其他的第三方模組。由於 Cosmos SDK 是一個開源的框架,一些模組可能是惡意的,這就意味著需要安全原則來合理化模組之間的交互。這些原則基於 object-capabilities。實際上,這意味著不是讓每個模組保留其他模組的訪問控制列表,而是每個模組都實現稱作 keeper 的特殊對象,這些對象可以傳遞給其他模組並授予預先定義的一組能力。

SDK 模組在 SDK 的 x/ 目錄下定義。一些核心模組包括:

x/auth:用於管理帳戶和簽名。
x/bank:用於實作 token 和 token 轉帳。
x/staking + x/slashing:用於開發 POS 區塊鏈。
除了 x/ 中已有的模組,任何人都可以在他們的應用程序中使用它們自己定義的模組。

接下來的三十天內,就讓我們一起跟著小明的團隊一起學習最新的兩大跨鏈技術之一:Cosmos SDK。

Cosmos SDK 開發者資源:
https://cosmos.network/developers

Cosmos 官網:
https://cosmos.network/

BDE 社群小聚錄影:
https://bitlly.co/ogvpb


想找區塊鏈人才或想學習區塊鏈知識的夥伴。歡迎參加社群小聚,一起來輕鬆交流、互相學習成長、認識新朋友、發現新機會!
 
台北區塊鏈社群
https://bitlly.co/Q4dIK

BDE 區塊鏈學院 - 讓每個企業都懂區塊鏈。
https://bitlly.co/mbDwX

藉著親自並協助他人進行軟體開發,
我們正致力於發掘更優良的軟體開發方法。
透過這樣的努力,我們已建立以下價值觀:
個人與互動 重於 流程與工具
可用的軟體 重於 詳盡的文件
與客戶合作 重於 合約協商
回應變化 重於 遵循計劃
也就是說,雖然右側項目有其價值,
但我們更重視左側項目。


上一篇
區塊鏈 3.0 - Cosmos SDK 介紹
下一篇
區塊鏈 3.0 - Cosmos SDK 生態圈
系列文
新一代跨鏈技術 Cosmos SDK 區塊鏈開發框架13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言